﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using VRA.Dto;
using VRA.BusinessLayer;

namespace ViewRidgeAssistant
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
           



        public MainWindow()
        {
            InitializeComponent();

        }

        #region Artist
        private void btnAddA_Click(object sender, RoutedEventArgs e)
        {
            AddArtistWindow window = new AddArtistWindow();
            window.ShowDialog();

            //Получаем список художников
            IList<ArtistDto> items = ProcessFactory.GetArtistProcess().GetList();
            //Передаем этот список таблице на отображение
            dgArtists.ItemsSource = items;

        }

        private void btnDeleteA_Click(object sender, RoutedEventArgs e)
        {
            //Получаем выделенную строку с объектом художника
            ArtistDto item = dgArtists.SelectedItem as ArtistDto;
            //если там не художник или пользователь ничего не выбрал сообщаем об этом
            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление художника");
                return;
            }
            //Просим подтвердить удаление
            MessageBoxResult result = MessageBox.Show("Удалить художника " + item.Name + "?",
                       "Удаление художника", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;
            //Если все проверки пройдены и подтверждение получено, удаляем художника
            ProcessFactory.GetArtistProcess().Delete(item.Id);
            //И перезагружаем список художников
            btnReloadA_Click(sender, e);

        }

        private void btnReloadA_Click(object sender, RoutedEventArgs e)
        {
            //Получаем список художников и передаем его на отображение таблице
            dgArtists.ItemsSource = ProcessFactory.GetArtistProcess().GetList();


        }

        private void btnEditA_Click(object sender, RoutedEventArgs e)
        {
            //Получаем выделенную строку с объектом художника
            ArtistDto item = dgArtists.SelectedItem as ArtistDto;
            //если там не художник или пользователь ничего не выбрал сообщаем об этом
            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование");
                return;
            }

            //Создаём окно
            AddArtistWindow window = new AddArtistWindow();
            //Передаём объект на редактирование
            window.Load(item);
            //Отображаем окно с данными
            window.ShowDialog();
            //Перезагружаем список объектов
            btnReloadA_Click(sender, e);


        }
        #endregion;

        #region Customer

        private void btnAddC_Click(object sender, RoutedEventArgs e)
        {
            AddCustomerWindow window = new AddCustomerWindow();
            window.ShowDialog();
            dgCustomer.ItemsSource = ProcessFactory.GetCustomerProcess().GetList();
        }

        private void btnEditC_Click(object sender, RoutedEventArgs e)
        {
            CustomerDto item = dgCustomer.SelectedItem as CustomerDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование клиента");
                return;
            }

            //Создаём окно
            AddCustomerWindow window = new AddCustomerWindow();
            //Передаём объект на редактирование
            window.Load(item);
            //Отображаем окно с данными
            window.ShowDialog();
            //Перезагружаем список объектов

            btnReloadC_Click(sender, e); 


        }

        private void btnReloadC_Click(object sender, RoutedEventArgs e)
        {
            dgCustomer.ItemsSource = ProcessFactory.GetCustomerProcess().GetList();
        }

        private void btnDeleteC_Click(object sender, RoutedEventArgs e)
        {

            CustomerDto item = dgCustomer.SelectedItem as CustomerDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление клиента");
                return;
            }

            MessageBoxResult result = MessageBox.Show("Удалить клиента " + item.Name + "?",
               "Удаление клиента", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            
            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;

          
            ProcessFactory.GetCustomerProcess().Delete(item.Id);

            btnReloadC_Click(sender, e);
          


        }

        #endregion;

        #region Work
        private void btnAddW_Click(object sender, RoutedEventArgs e)
        {
            AddWorkWindow window = new AddWorkWindow();
            window.ShowDialog();

            dgWork.ItemsSource = ProcessFactory.GetWorkProcess().GetList();
        }

        private void btnEditW_Click(object sender, RoutedEventArgs e)
        {
            WorkDto item = dgWork.SelectedItem as WorkDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование");
                return;
            }

            AddWorkWindow window = new AddWorkWindow();
            window.Load(item);
            window.ShowDialog();
            btnReloadW_Click(sender, e);


        }

        private void btnReloadW_Click(object sender, RoutedEventArgs e)
        {
            dgWork.ItemsSource = ProcessFactory.GetWorkProcess().GetList();
        }

        private void btnDeleteW_Click(object sender, RoutedEventArgs e)
        {
            //Получаем выделенную строку с объектом 
            WorkDto item = dgWork.SelectedItem as WorkDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление картины");
                return;
            }

            //Просим подтвердить удаление
            MessageBoxResult result = MessageBox.Show("Удалить картину " + item.Title + "?",
                       "Удаление картины", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;

            //Если все проверки пройдены и подтверждение получено, удаляем
            ProcessFactory.GetWorkProcess().Delete(item.Id);

            btnReloadW_Click(sender, e);

        }

        #endregion;

        #region Transaction
        private void btnAddT_Click(object sender, RoutedEventArgs e)
        {
            AddTransactionWindow window = new AddTransactionWindow();
            window.ShowDialog();
            dgTrans.ItemsSource = ProcessFactory.GetTransactionProcess().GetList();
        }

        private void btnEditT_Click(object sender, RoutedEventArgs e)
        {
            TransactionDto item = this.dgTrans.SelectedItem as TransactionDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Изменение транзакции");
                return;
            }

            AddTransactionWindow window = new AddTransactionWindow();
            window.Load(item);
            window.ShowDialog();
            btnReloadT_Click(sender, e);

        }

        private void btnReloadT_Click(object sender, RoutedEventArgs e)
        {
            dgTrans.ItemsSource = ProcessFactory.GetTransactionProcess().GetList();
        }

        private void btnDeleteT_Click(object sender, RoutedEventArgs e)
        {
            TransactionDto item = this.dgTrans.SelectedItem as TransactionDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления","Удаление транзакции");
                return;
            }

            MessageBoxResult result = MessageBox.Show("Удалить Транзакцию " + item.TransactionID + "?",
               "Удаление транзакции", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            
            if (result != MessageBoxResult.Yes)
                return;
            
            ProcessFactory.GetTransactionProcess().Delete(item.TransactionID);

            btnReloadT_Click(sender, e);

        }
        #endregion

    }
}
